package leetcode.offer;

@SuppressWarnings("all")
public class _26_删除有序数组中的重复项 {

    /**
     * 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度
     * 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成
     * 输入：nums = [1,1,2]
     * 输出：2, nums = [1,2]
     */
    public int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) return 0;
        // 双指针：数组中的第一个数不论怎样都不用改变
        // 快指针用来扫描整个数组
        // 慢指针用来指向可以被覆盖的值
        int fast = 1;
        int slow = 1;
        int len = nums.length;
        while (fast < len) {
            // 当前遍历到的值和前一个值不相等，就可以移动到最前面
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}
